package com.bougaga.opensource.scheduler.core.handler;

import com.bougaga.opensource.scheduler.core.task.DelayedTask;

/**
 * 任务处理器接口
 * 
 * @author bougaga
 * @since 1.0.0
 */
public interface TaskHandler {
    
    /**
     * 获取处理器名称
     * 
     * @return 处理器名称
     */
    String getHandlerName();
    
    /**
     * 获取支持的任务类型
     * 
     * @return 任务类型
     */
    String getSupportedTaskType();
    
    /**
     * 执行任务
     * 
     * @param task 延迟任务
     * @return 执行结果
     */
    TaskResult execute(DelayedTask task);
    
    /**
     * 判断是否支持该任务类型
     * 
     * @param taskType 任务类型
     * @return 是否支持
     */
    default boolean supports(String taskType) {
        return getSupportedTaskType().equals(taskType);
    }
    
    /**
     * 任务执行前的回调
     * 
     * @param task 延迟任务
     */
    default void beforeExecute(DelayedTask task) {
        // 默认空实现
    }
    
    /**
     * 任务执行后的回调
     * 
     * @param task 延迟任务
     * @param result 执行结果
     */
    default void afterExecute(DelayedTask task, TaskResult result) {
        // 默认空实现
    }
    
    /**
     * 任务执行异常的回调
     * 
     * @param task 延迟任务
     * @param exception 异常
     */
    default void onException(DelayedTask task, Exception exception) {
        // 默认空实现
    }
}
